www.gusucode.com > VC++迷宫游戏源代码源码程序 > VC++迷宫游戏源代码源码程序\code\WinGame 2.7\Include\AnimCtrlEx.cpp

    //Download by http://www.NewXing.com
// AnimCtrlEx.cpp: implementation of the CAnimCtrlEx class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "AnimCtrlEx.h"

//=============================基于动画帧的动画控制类========================================================
void CAnimCtrlEx::New(CBmp24*pBmp,int x,int y,SAnimFrame *pFrame,int FrameType)
{
	m_pBmp=pBmp;
	m_x=x;
	m_y=y;
	m_Idx=0;
	m_EffectFlag=0;
	m_bHide=0;
	m_FrameType=FrameType;
	m_Count=0;
	m_CurrentFrame=0;
	m_AddFrame=1;
	m_pFrame=pFrame;
	m_bHide=0;
	CAnimCtrl::New();//一定别忘了,添加到g_AnimList
}
int	 CAnimCtrlEx::Play(void*)
{
	if(m_bHide) return 0;//隐藏的图片不被处理
	if(m_FrameType==FRAME_STATIC) return 0;//静止的图片不被处理
	m_Count++;
	if(m_Count>m_pFrame[m_CurrentFrame].t)//该帧显示延迟结束
	{
		m_Count=0;
		m_CurrentFrame+=m_AddFrame;//切换到下一帧
	}
	if(m_Count>0xfffd)	m_Count;
	if(m_FrameType==FRAME_PLAY_ONCE && m_pFrame[m_CurrentFrame].t==0xffff)
		return 1;

	return 0;
}
void	CAnimCtrlEx::Draw(CBmp24*p)
{
	int x,y;
	if(m_bHide) return;

	if(m_CurrentFrame<0)
	{
		m_CurrentFrame=1;
		m_AddFrame=1;
	}
	else if(m_pFrame[m_CurrentFrame].t==0xffff)
	{
		switch(m_FrameType)
		{

			case FRAME_PLAY_ONCE:
				m_CurrentFrame-=1;
				break;
			case FRAME_REPEAT:
				m_CurrentFrame=0;
				break;
			case FRAME_GO_BACK:
				m_CurrentFrame-=2;
				m_AddFrame=-1;
				break;
			default:
				m_CurrentFrame=0;
		}
	}
	x=m_x+m_pFrame[m_CurrentFrame].x;
	y=m_y+m_pFrame[m_CurrentFrame].y;
	m_Idx=m_pFrame[m_CurrentFrame].idx;
	m_pBmp->DrawBmp(p,x,y,m_Idx,m_EffectFlag);
}
CAnimCtrlEx::CAnimCtrlEx(){}
CAnimCtrlEx::~CAnimCtrlEx(){}